﻿
//随机链表的复制
//https://leetcode.cn/problems/copy-list-with-random-pointer/description/
//
//class Solution {
//public:
//    Node* copyRandomList(Node* head) {
//        map<Node*, Node*> cpNodeMp;
//        Node* Chead = new Node(0), * tail;
//
//        tail = Chead;
//        Node* cur = head;
//        while (cur)
//        {
//            Node* copy = new Node(cur->val);
//            cpNodeMp[cur] = copy;
//            tail->next = copy;
//            tail = tail->next;
//            cur = cur->next;
//        }
//        cur = head;
//        Node* copy = Chead->next;
//        while (cur)
//        {
//            copy->random = cpNodeMp[cur->random];
//            cur = cur->next;
//            copy = copy->next;
//        }
//        return Chead->next;
//    }
//};


//前K个高频单词
//https://leetcode.cn/problems/top-k-frequent-words/description/
//
//class Solution {
//public:
//    struct Compare
//    {
//        bool operator()(const pair<string, int>& s1, const pair<string, int>& s2)
//        {
//            return s1.second > s2.second || (s1.second == s2.second && s1.first < s2.first);
//        }
//    };
//    vector<string> topKFrequent(vector<string>& words, int k) {
//        map<string, int> Countmap;
//        for (auto& e : words)
//        {
//            Countmap[e]++;
//        }
//
//        vector<pair<string, int>> Nv(Countmap.begin(), Countmap.end());
//        sort(Nv.begin(), Nv.end(), Compare());
//
//        vector<string> Sv;
//        vector<pair<string, int>>::iterator It = Nv.begin();
//        while (k--)
//        {
//            Sv.push_back(It->first);
//            It++;
//        }
//        return Sv;
//    }
//};

// 两个数组的交集
//https://leetcode.cn/problems/intersection-of-two-arrays/description/
//class Solution {
//public:
//    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
//
//        set<int> s1(nums1.begin(), nums1.end());
//        set<int> s2(nums2.begin(), nums2.end());
//
//        auto it1 = s1.begin();
//        auto it2 = s2.begin();
//
//        vector<int> v;
//        while ((it1 != s1.end()) && (it2 != s2.end()))
//        {
//            if (*it1 > *it2)
//            {
//                it2++;
//            }
//            else if (*it1 < *it2)
//            {
//                it1++;
//            }
//            else
//            {
//                v.push_back(*it1);
//                it1++;
//                it2++;
//            }
//        }
//        return v;
//    }
//};




//#include<iostream>
//using namespace std;
////#include"AVLTree.h"
//#include"RBTree.h"
//
//
//
//int main()
//{
//	RBTtest1();
//	//test2();
//	return 0;
//}


//#include<iostream>
//using namespace std;
//
//#include"map.h"
//#include"set.h"
//
//int main()
//{
//	 //sss::SetTest1();
//	//sss::test_map1();
//	return 0;
//}


//单词识别
//﻿https://www.nowcoder.com/practice/16f59b169d904f8898d70d81d4a140a0?tpId=94&tqId=31064&rp=1&ru=%2Factivity%2Foj&qru=%2Fta%2Fbit-kaoyan%2Fquestion-ranking&tPage=2

//#include <iostream>
//#include<map>
//#include<vector>
//#include<algorithm>
//using namespace std;
//struct Compare {
//    bool operator()(const pair<string, int>& s1, const pair<string, int>& s2) {
//        return s1.second > s2.second || (s1.second == s2.second && s1.first < s2.first);
//    }
//};
//
//
//int main() {
//
//    map<string, int> mp;
//    string str;
//    getline(cin, str);
//    string::iterator pstrb = str.begin();
//    string::iterator pstrcur = str.begin();
//    while (pstrcur != str.end()) {
//        if (*pstrcur == ' ') {
//            string s1(pstrb, pstrcur);
//            string::iterator its1 = s1.begin();
//            while (its1 != s1.end()) {
//                if (*its1 >= 'A' && *its1 <= 'Z')
//                    *its1 += 32;
//                ++its1;
//            }
//            mp[s1]++;
//            pstrb = pstrcur + 1;
//        }
//        if (*pstrcur == '.') {
//            string s1(pstrb, pstrcur);
//            string::iterator its1 = s1.begin();
//            while (its1 != s1.end()) {
//                if (*its1 >= 'A' && *its1 <= 'Z')
//                    *its1 += 32;
//                ++its1;
//            }
//            mp[s1]++;
//            break;
//        }
//        ++pstrcur;
//    }
//
//    vector<pair<string, int>> v(mp.begin(), mp.end());
//    sort(v.begin(), v.end(), Compare());
//    vector<pair<string, int>>::iterator it = v.begin();
//    while (it != v.end()) {
//        cout << it->first << ":" << it->second << endl;
//        ++it;
//    }
//    return 0;
//}

